﻿using Persistencia;
using Persistencia.Tabelas;
using System;
using System.Collections.Generic;
using System.Data.Linq.SqlClient;
using System.Linq;
using System.Text;

namespace Dlls
{
    public class ProdutosDLL
    {
        private GrupoProdutoDLL grupoProdutoDLL;
        private Context context;
        private List<Produto> campos;

        public ProdutosDLL()
        {
            context = new Context();
            grupoProdutoDLL = new GrupoProdutoDLL();
        }

        public IEnumerable<Object> List(bool complete)
        {
            if (complete) {
                return (from o in context.Produtos select o).ToList();
                
            } 
            else {
                return (from o in context.Produtos select o).ToList();
            }

        }


        public void Insert(Produto produto) 
        {
            context.Produtos.InsertOnSubmit(produto);
            context.SubmitChanges();
        }

        public List<Produto> List()
        {
            return (from P in context.Produtos
                    join E in context.Estoques on P.Codigo equals E.CodProduto
                    join G in context.GrupoDeProdutos on P.CodGrupo equals G.Codigo
                    select P).ToList();
        }

        public void Update(int codigo, Produto produto)
        {
           Produto prod = context.Produtos.SingleOrDefault(o => o.Codigo == codigo);

           prod.InsumoProducao = produto.InsumoProducao;
           prod.Nome = produto.Nome;
           prod.DescricaoProduto = produto.DescricaoProduto;
           prod.CodGrupo = produto.CodGrupo;
           prod.EstoqueMaximo = produto.EstoqueMaximo;
           prod.EstoqueMinimo = produto.EstoqueMinimo;
           prod.UnidadeMedida = produto.UnidadeMedida;
           
            context.SubmitChanges();
        }

        public void Delete(int CodProduto) 
        {
            Estoque est = context.Estoques.Single(e => e.CodProduto == CodProduto);
            Produto prod = context.Produtos.Single(p => p.Codigo == CodProduto);
            context.Estoques.DeleteOnSubmit(est);
            context.Produtos.DeleteOnSubmit(prod);
            
            context.SubmitChanges();
        }

        public Produto getProduto(int codigo)
        {
            return context.Produtos.SingleOrDefault(e => e.Codigo == codigo);
        }
        public IEnumerable<Produto> ListProdutoPorGrupo(int CodGrupo)
        {
            return (from o in context.Produtos.Where(prod => prod.CodGrupo == CodGrupo) select o).ToList();
        }

        public IEnumerable<Produto> ListProdutosPorNome(string nome)
        {
            return (from o in context.Produtos.Where(prod => SqlMethods.Like(prod.Nome, "%" + nome + "%")) select o).ToList();
        }


    }
}
